/**
 * 实现字符串到整数的转换
 * 该类提供了一个方法，用于将字符串转换为32位有符号整数
 */
public class myAtoi {
    /**
     * 将字符串转换为32位有符号整数
     *
     * @param s 输入的字符串
     * @return 转换后的整数，如果输入不合法或溢出，返回0或相应的边界值
     */
    public int myAtoi(String s) {
        // 将输入字符串去除前后空格并转换为字符数组
        char[] c = s.trim().toCharArray();
        // 如果字符数组为空，直接返回0
        if (c.length == 0) return 0;

        // 初始化结果变量为0，边界值为Integer.MAX_VALUE / 10，用于后续判断整数溢出
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        // 初始化游标i和符号sign，默认符号为正
        int i = 1, sign = 1;
        // 如果第一个字符是'-'，设置符号为负
        if (c[0] == '-') sign = -1;
        // 如果第一个字符不是'+'且不是'-'，将游标i设置为0
        else if (c[0] != '+') i = 0;

        // 从第一个数字字符开始遍历
        for (int j = i; j < c.length; j++) {
            // 如果当前字符不是数字，结束循环
            if (c[j] < '0' || c[j] > '9') break;
            // 如果当前结果超过边界值或等于边界值且当前字符大于'7'，表示将要溢出，根据符号返回相应的最大或最小值
            if (res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            // 更新结果为当前结果乘以10加上当前字符代表的数字值
            res = res * 10 + (c[j] - '0');
        }
        // 返回最终结果，乘以符号值
        return sign * res;
    }
}
